/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package proy2redes;

/**
 *
 * @author jose
 */
import java.io.*;
import java.util.LinkedList;

public class manejoArchivos {

    public static String contenido(String nombre){
        File f = new File(nombre);
        String content = "";
        if (!f.exists()){
            System.out.println("No existe el archivo "+nombre);
            return null;
        }
        try {
            FileReader fr = new FileReader(f);
            BufferedReader br = new BufferedReader(fr);
            String linea = null;
            while ((linea = br.readLine())!=null){
                content += linea+"\n";
            }
        } catch (Exception e){
            System.out.println("Error al obtener el "
                    + "contenido del archivo "+nombre+"\n"+
                    e.getMessage());
        }
        return content;
    }

    public static long tamArch(String nombre){
        File f = new File(nombre);
        if (!f.exists()){
            System.out.println("No existe el archivo "+nombre);
            return -1;
        }
        return f.length();
    }

    public static String listarDirectorio(String dir){
        File f = new File(dir);
        String listS = "";
        if (!f.exists()){
            System.out.println("No existe el archivo "+dir);
            return null;
        }
        String[] lista = f.list();
        int tam = lista.length;
        for (int i=0; i<tam; i++){
            String arch = lista[i];
            listS += arch + " "+tamArch(dir+"/"+arch)+"\n";
        }
        return listS;
    }

    public static void enviarArchivo(String comando,String nombreArch,
            String directorio, PrintWriter out){
        String arch = directorio+"/"+nombreArch;
        File f = new File(arch);
        if (!f.exists()){
            System.out.println("No existe el archivo "+nombreArch);
            out.println("Error: No existe el archivo "+nombreArch+"\n");
            return;
        }
        try {
            
            String content = manejoArchivos.contenido(arch);
            out.println(comando +" "+nombreArch+"\n"+content+".");
            //out.write();
        } catch (Exception e){
            System.out.println("Error al enviar el archivo "+nombreArch);
            out.println("Error: Falla al enviar el archivo "+nombreArch+"\n");
        }
    }

    public static void recibirArchivo(String nombreArch,BufferedReader br){
        try{
            File f = new File(nombreArch);
            f.createNewFile();
            FileWriter fw = new FileWriter(f);
            String linea = null;
            System.out.println("Archivo recibido:");
            while((linea = br.readLine())!=null){
                if (linea.equals(".")){
                    break;
                }
                fw.write(linea+"\n");
                System.out.println(linea);
            }
            System.out.println("Fin de archivo recibido");
            fw.flush();
            fw.close();
            
        } catch (Exception e) {
            System.out.println("Error al recibir el archivo "+nombreArch+
                    "\n"+e.getMessage());
        }
    }

    public static LinkedList comandosArchivo(String nombre){
        if (nombre == null){
            return null;
        }
        File f = new File(nombre);
        LinkedList content = new LinkedList();
        if (!f.exists()){
            System.out.println("No existe el archivo "+nombre);
            return null;
        }
        try {
            System.out.println("Archivos de comando: "+nombre);
            FileReader fr = new FileReader(f);
            BufferedReader br = new BufferedReader(fr);
            String linea = null;
            while ((linea = br.readLine())!=null){
                content.add(linea);
            }
        } catch (Exception e){
            System.out.println("Error al obtener los "
                    + "comandos del archivo "+nombre+"\n"+
                    e.getMessage());
        }
        return content;
    }

    public static void copiarArchivo(String arch, OutputStream out){
        try{
            ObjectOutputStream output = new ObjectOutputStream(out);
            File f = new File(arch);f.setReadOnly();
            output.writeObject(f);
            //output.flush();
            
        } catch(Exception e){
            System.out.println("Error al copiar Archivo 2");
            System.out.println(e);
        }

    }

    public static void pegarArchivo(String directorio,InputStream in){
        try{
            ObjectInputStream input = new ObjectInputStream(in);
            File f = (File) input.readObject();

            System.out.println(f.getAbsolutePath());
            String s = f.getName();
            File f2 = new File(directorio,s);
            System.out.println("Archivo: "+s+" "+f.length());
            f.renameTo(f2);
            f.createNewFile();
            System.out.println("Salio de pegarArchivo");
        } catch (Exception e){
            System.out.println("Error al pegar el archivo");
            System.out.println(e);
        }
    }
}
